/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author NiCo
 */
public class ControladorPrincipal {

    private long graficas ;

    private ControladorPrincipal() {
    }

    public static ControladorPrincipal getInstance() {
        return PrincipalHolder.INSTANCE;
    }

    private static class PrincipalHolder {

        private static final ControladorPrincipal INSTANCE = new ControladorPrincipal();
        private static final ControladorUsuarios usuarios = new ControladorUsuarios();
        private static final ControladorCasos casos = new ControladorCasos();
        private static final ControladorPersonas personas = new ControladorPersonas();
        private static final ControladorEstadisticas estadisticas = new ControladorEstadisticas();
//        private static final ControladorInsumos insumos = new ControladorInsumos();
//        private static final ControladorLoteOvinos loteCarneros = new ControladorLoteOvinos();
//        private static final ControladorGanado ganado = new ControladorGanado();
//        private static final ControladorZona zona = new ControladorZona();
//        private static final ControladorCicloPreniezGanado ciclo = new ControladorCicloPreniezGanado();
        private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("102-LDLD");
        private static final EntityManager em = emf.createEntityManager();
//        private static final ControladorProfesionales profesionales = new ControladorProfesionales();
//        private static final ControladorAlerta alertas = new ControladorAlerta();
//        private static final ControladorCompras compra = new ControladorCompras();
        private static final Properties propiedades = new Properties();
    }

    public ControladorUsuarios getControladorUsuarios() {
        return PrincipalHolder.usuarios;
    }

    public ControladorCasos getControladorCasos() {
        return PrincipalHolder.casos;
    }

    public ControladorPersonas getControladorPersonas() {
        return PrincipalHolder.personas;
    }
    
    public ControladorEstadisticas getControladorEstadisticas() {
        return PrincipalHolder.estadisticas;
    }

    public Properties getPropiedades() {
        try {
            FileInputStream in = new FileInputStream("src/utilidades/Propiedades.properties");
            PrincipalHolder.propiedades.load(in);
        } catch (IOException ex) {
        }
        if (!PrincipalHolder.propiedades.isEmpty()) {
            return PrincipalHolder.propiedades;
        } else {
            return null;
        }
    }

    public EntityManager getEntity() {
        return PrincipalHolder.em;
    }

    public void guardar(Object object) {
        getEntity().getTransaction().begin();
        try {
            getEntity().persist(object);
            getEntity().getTransaction().commit();
        } catch (Exception e) {
            getEntity().getTransaction().rollback();
        }
    }

    public void eliminar(Object object) {
        getEntity().getTransaction().begin();
        try {
            getEntity().remove(object);
            getEntity().getTransaction().commit();
        } catch (Exception e) {
            getEntity().getTransaction().rollback();
        }
    }

    public void cerrarEntity() {
        PrincipalHolder.em.close();
    }

    public long getGraficas() {
        return graficas;
    }

    public void setGraficas(long graficas) {
        this.graficas = graficas;
    }

}
